import type { MicroAppContext } from '@jari-ace/app-bolts';

import { setupAxios } from '@jari-ace/app-bolts';

import { useUserStore } from '#/store';

/**
 * 根据基座应用初始化应用
 */
function switchContext(context: MicroAppContext | undefined) {
  if (!context) {
    throw new Error(
      '无法获取到基座应用的上线文，请确保当前应用已嵌入在基座应用中！',
    );
  }

  // 设置axios
  setupAxios(context.createAxios, context.createAxiosWithoutCache);

  const { setUserInfo } = useUserStore();
  // 设置用户信息
  setUserInfo(context.loginUser);

  // setupI18n(app, newContext.locale).then(() => {
  //   useLocaleStore(store).setLocaleInfo({
  //     locale: newContext.locale,
  //   });
  // })

  // setupAppState({
  //   getAppDevMode: newContext.getAppDevMode,
  //   setAppDevMode: newContext.setAppDevMode,
  // })
}

/**
 * 微应用初始化，用来挂载axios，用户信息等信息
 * 注意： 此方法需要使用到pinia，需要在pinia挂载后执行,但又不能在app.mount('#app')之后执行！！
 */
export async function init() {
  if (window.__MICRO_APP_ENVIRONMENT__) {
    if (!window.rawWindow.appContext) {
      throw new Error('无法找到基座应用的上下文。');
    }
    switchContext(window.rawWindow.appContext);

    // 监听基座应用的上下文变化
    window.microApp?.addGlobalDataListener((data) => {
      // 判断是否是基座应用发送
      if (data.sender !== 'shell') {
        return;
      }
      // 判断类型是否是context
      if (data.payload?.type !== 'context') {
        return;
      }
      switchContext(data.payload.content);
    });
  } else {
    // 非微前端环境
  }
}
